Jag har en datamängd enligt nedan namn col1 col2 a 10,3 10,9 b 11 15 c 20 7.2 d 6.2 6.2 e 5.3 5.4 f 4.5 4.0 Jag vill jämföra col1 och col2 i min df och jag vill skapa en annan kolumn där medan jag jämför col1- och col2-värden om värdet på col2 ökar från col1 så vill jag ange att öka bredvid dem i min kolumn där och om minskar då vill jag skriva minskande och inga ändringar om de är desamma och jag vill ha min produktion så här namn col1 col2 col3 en 10,3 10,9 ökning b 11 15 ökar c 20 7.2 minskar d 6.2 6.2 ingen förändring e 5.3 5.4 ökar f 4,5 4,0 minskar
2021-01-31 08:15:29
Med dplyr: df%>% mutera (Col3 = ifelse (col2 == col1, "ingen förändring", ifelse (col2> col1, "ökar", "minskar"))) Eller använda case_when som föreslås av @akrun: df%>% mutera (Col3 = case_when (col1 == col2 ~ "ingen förändring", col2> col1 ~ "Ökar", SANT ~ "minskar")) Resultat: namn col1 col2 Col3 1 a 10,3 10,9 ökar 2 b 11,0 15,0 ökar 3 c 20,0 7,2 minskar 4 d 6,2 6,2 ingen ändring 5 e 5.3 5.4 ökar 6 f 4,5 4,0 minskar Data: df <-struktur (lista (namn = c ("a", "b", "c", "d", "e", "f"), col1 = c (10.3, 11, 20, 6.2, 5.3, 4.5), col2 = c (10.9, 15, 7.2, 6.2, 5.4, 4)), class = "data.frame", row.names = c (NA, -6L)) | Vi kan subtrahera col1 för col2 och sedan använda sign för att tilldela värden df $ col3 <- c ("minskar", "ingen förändring", "ökar") [tecken (df $ col1 - df $ col2) + 2] df # namn col1 col2 col3 # 1 a 10.3 10.9 minskar # 2 b 11,0 15,0 minskar # 3 c 20.0 7.2 ökar # 4 d 6.2 6.2 ingen förändring # 5 e 5.3 5.4 minskar # 6 f 4.5 4.0 ökar Eller med dplyr kan vi använda case_when bibliotek (dplyr) df%>% mutera (col3 = case_when (col1 == col2 ~ "ingen förändring", col1> col2 ~ "ökar", SANT ~ "minskar")) | Bas R df $ col3 <-med (df, ifelse (col1> col2, "minskande", ifelse (col1